package com.xtwy.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

/**
 * @作 者: 侯建军
 * @日 期: 2018/8/11 16:49
 * @描 述:
 * @公 司：山西迅腾伟业
 */
@Configuration
@EnableWebSocketMessageBroker
//通过EnableWebSocketMessageBroker
// 开启使用STOMP协议来传输基于代理(message broker)的消息,
// 此时浏览器支持使用@MessageMapping 就像支持
// @RequestMapping一样。
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    /**
     * endPoint 注册协议节点,并映射指定的URl
     *
     * @param registry
     */
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        //注册一个Stomp 协议的endpoint,并指定 SockJS协议
        //节点名为：endpointAdmin,将来客户端要连接的节点
        //如果没有连接，客户端无法进行通信
        /**
         * 客户端代码：
         *  var socket = new SockJS('/endpointAdmin');
         */
        registry.addEndpoint("/endpointAdmin").withSockJS();

        //注册一个名字为"endpointChat" 的endpoint,并指定 SockJS协议。   点对点-用
        //节点名为：endpointChat，
        /**
         * 客户端代码：
         *    var sock = new SockJS("/endpointChat");
         */
        registry.addEndpoint("/endpointChat").withSockJS();
    }

    /**
     * 配置消息代理(message broker)
     * @param registry
     */
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        //广播式应配置一个/topic 消息代理
//        registry.enableSimpleBroker("/topic");
        /**
         * topic为广播，其中控制器方法 ：
         * @RequestMapping("/broadcast")
             @ResponseBody
             public String broadcast()throws Exception
             {
             ws.sendMessage();
             return "消息已广播";
             }
         * queue为点对点：其它方法为点对点
         */
        //点对点式增加一个/queue 消息代理
        registry.enableSimpleBroker("/queue","/topic");

    }
}